package com.shujia.spark.mllib

import org.apache.spark.ml.linalg
import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.ml
import org.apache.spark.ml.feature.LabeledPoint

object Demo1Type {
  def main(args: Array[String]): Unit = {

    /**
     * 向量：有方向，有大小   --- 用于变量特征向量（x）
     */

    //稠密向量
    val dense: linalg.Vector = Vectors.dense(Array(1.2, 0, 0, 0, 0, 0, 0, 2.2, 121.2, 0, 0, 0, 44.2, 11.0))

    println(dense)

    //稀疏向量
    /**
     * 只存储有值的位置，如果0很多，可以减少占用的空间
     */
    val sparse: linalg.Vector = Vectors.sparse(14, Array(0, 7, 8, 12, 13), Array(1.2, 2.2, 121.2, 44.2, 11.0))
    println(sparse)

    //可以相互转换
    println(dense.toSparse)
    println(sparse.toDense)

    /**
     * 标记点::由目标值和特征向量组成
     * 再训练模型之前需要将院士数据转换成LabeledPoint，才能带入算法训练模型
     */
    val pos: LabeledPoint = LabeledPoint(1.0, Vectors.dense(1.0, 0.0, 3.0))

    println(pos)

  }

}
